package com.qf.strategy.listener;

import com.qf.strategy.feign.CacheService;
import com.qf.strategy.utils.FilterOrdersUtil;
import com.qianfeng.smsplatform.common.constants.CacheConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.annotation.Resource;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import java.util.Set;

/**
 * @author 徐老板
 * @date 2020/2/29   20:41
 */
//使用servletcontext实现自动把redis中数据加载到jvm缓存中
//这个的好处是可以根据不同用户加载不同的过滤机制  不过正常情况下这个过滤机制大家共用一个就可以
//要添加这个注解 配合启动类的注解随启动类开启而开启
@WebListener
public class LoadFiltersFromRedisListener implements ServletContextListener
{
    private static final Logger LOGGER = LoggerFactory.getLogger(LoadFiltersFromRedisListener.class);
    @Resource
    private CacheService cacheService;

    //重新它的实例化方法 把要实现的业务逻辑放在它这个实例化方法中 就可以随这个实例化而执行了
    @Override
    public void contextInitialized(ServletContextEvent sce) {

        //获取所有以filtersorder:开头的数据
        //我们必须先知道以filtersorder:开头的key 有哪些
        //拿到 key 之后挨个获取一次,然后保存本地
        Set<String> keys = cacheService.getKeys(CacheConstants.CACHE_PREFIX_SMS_FILTERS_ORDER + "*");

        LOGGER.error("从redis中查到的过滤器集合是"+keys);
        for (String key : keys) {
            String filterorder = cacheService.get(key);
            FilterOrdersUtil.filtersOrderMap.put(key, filterorder);
        }
    }



}
